package app.productmanagement.web.ProductAndTag.controller;

import app.productmanagement.Pojo.Result;
import app.productmanagement.web.ProductAndTag.Pojo.ProductTag;
import app.productmanagement.web.ProductAndTag.Service.ProductTagService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/product-tags")
@RequiredArgsConstructor
public class ProductTagController {

    private final ProductTagService productTagService;

    // 添加商品标签关系
    @PostMapping
    public Result<?> add(@RequestBody ProductTag productTag) {
        if (productTag == null) {
            return Result.failure("RequestBody 为 null");
        }
        return productTagService.addProductTag(productTag);
    }

    //获取所有产品标签
    @GetMapping()
    public Result<?> getProductTags() {
        return productTagService.getAllProductTags();
    }

    // 批量检索产品标签
    // 通过产品 ID 或 标签 ID 检索产品的 标签ID 或 产品ID。
    //key_id(必填): 1：通过产品 ID 检索 标签ID 2：通过标签 ID 检索 产品 ID
    @GetMapping("/{key_id}/{id}")
    public Result<?> getProductById(@PathVariable int key_id, @PathVariable int id) {
        if (key_id < 1 || key_id > 2) {
            return Result.failure("key_id 超出范围");
        }

        return Result.success(productTagService.getProductTag(key_id == 1, id));
    }

    //  删除单个商品标签关系
    @DeleteMapping("/{product}/{tag}")
    public Result<?> Delete(@PathVariable int product, @PathVariable int tag) {
        if (!productTagService.deleteProductTag(product, tag)) {
            return Result.failure("删除失败");
        }

        return new Result<>(true, "已成功删除商品的标签", new ProductTag(product, tag));
    }

    // 通过产品 ID 或 标签 ID 删除商品标签关系
    @DeleteMapping("Deletes/{key_id}/{id}")
    public Result<?> Deletes(@PathVariable int key_id, @PathVariable int id) {

        if (key_id < 1 || key_id > 2) {
            return Result.failure("key_id 超出范围");
        }
        if (!productTagService.deleteProductTags(key_id == 1, id)) {
            return Result.failure("删除失败");
        }

        return new Result<>(true,
                key_id == 1 ? "已成功删除商品对应所有标签" : "已成功删除标签对应所有商品",
                key_id == 1 ? "product_id:" + id : "tag_id:" + id);
    }
}
